Obezbijeđuje direktnu komunikaciju između dva proizvoljna procesa na
različitim host-ima.
Komunikacija se odvija po uspiješno uspostavljenoj logičkoj
vezi.
Aplikacije vide apstrakciju koju pruža TCP u formi
dvosmjerne beskonačne sekvence bajta.
Jedan kraj dvosmjerne veze se naziva socket.
Aplikacija može da piše/čita proizvoljnu količinu podataka u/iz
socket-a.
OS identificira socket sa tupl-om (IPSrc,
PortSrc, IPDest, PortDest) kojeg
koristi kod demultipleksiranja prispjelih paketa.
Sekvenca bajta generirana od strane izvorišnog procesa se particira
u segmente čiji se sadržaj ubacuje u IP
pakete koji se šalju u mrežu.
TCP garantuje da će podaci biti dostavljeni
destinacijskom procesu u istom redoslijedu kao što su generirani u
izvorišnom procesu.
U slučaju da se neki paket u kojem se nalazi segment izgubi,
TCP ima mehanizam detekcije gubitka i ponovne transmisije
izgubljenog segmenta.
Koncept segmentiranja prikazan samo u
jednom smjeru. Obje strane imaju send i receive buffer-e
Garancija kontrole toka (flow control)
TCP štiti sporog primaoca od preopterećenja nastalog
zbog intenzivnog saobrećaja generiranog od strane bržeg pošiljaoca.
Garancija kontrola zagušenja (congestion control)
TCP štiti mrežu od preopterećenja i pokušava generirati
promet u skladu sa trenutnim estimiranim kapacitetom mreže.
TCP segment se sastoji od zaglavlja i podataka dobivenih od
aplikacije.
Maksimalna količina podataka u segmentu ograničena je sa vrijednošću
MSS (Maximum Segment Size), a postavlja se
tako da bi se izbjegla fragmentacija IP paketa u koje se
smještaju segmenti.
Tipični MSS: 1460, 536,
512.
Upotrebom MSS opcije, prilikom uspostave veze dvije
strane mogu pregovarati MSS koji će biti korišten u oba
smjera.
Upotrebom PMTUD (Path MTU Discovery) procedure,
TCP/IP stack može utvrditi optimalni MSS spram
kompletne putanje kojom se kreću podaci za već uspostavljenu
TCP vezu.
TCP zaglavlje
seq#
Relativano u odnosu na neki inicijalni seq#, koji je
odabran u procesu uspostave konekcije, predstavlja ukupnu količina
podataka u bajtima koje je pošiljac segmenta poslao drugoj strani, i to
do trenutka slanja segmenta.
Sljedeći poslani segment će imati seq# inkrementiran za
količinu bajta koja je poslana u podacima trenutnog segmenta.
ack#
Relativano u odnosu na neki inicijalni ack#, koji je
odabran u procesu uspostave konekcije, predstavlja ukupnu količina
podataka u bajtima koje je pošiljac segmenta primio u potpunosti i u
kontinuitetu od druge strane, i to do trenutka slanja trenutnog
segmenta.
ack# predstavlja signal potvrde za drugu stranu u
komunikaciji da su njegovi poslani bajti primljeni do ack#
potvrda se šalje samo za one one podatke u sekvenci koji su do sada
primljeni u kontinuitetu.
Druga strana procesira ovaj broj samo ukoliko je
ACK flag u zaglavlju postavljen na
vrijednost 1.
receive window
Predstavlja količinu podataka u bajtima koja je na raspolaganju
unutar receive buffer-a na strani pošiljaoca segmenta.
TCP dozvoljava da više segmenata bude poslano bez
prethodne potvrde, naspram količine slobodnog prostora oglašenog sa
receive window od druge strane, ili spram procjene
trenutnog kapaciteta mreže.
Dolazeći i odlazeći segmentiprimjer seq# i
ack# za echo aplikaciju
Slanje segmenata
Ukoliko od aplikacije prima manje količine podataka,
TCP odgađa slanje segmenata (tzv tinygram)
sve dok:
ne dobije potvrdu da je prethodno poslani tinygram primljen,
ili dok aplikacija ne generiše dovoljno podataka (>=
MSS)
Ova procedura se zove Nagle algoritam.
Za poslani segment TCP aktivira tajmer čiji period predstavlja
vrijeme u kojem se očekuje da će se od druge strane primiti potvrda za
poslati segment.
Slanje potvrda
Po primitku nekog segmenta primalac mora odlučiti kada će poslati
potvrdu za primljene podatke, algoritam slanja potvrde može se prikazati
narednom tabelom.
Događaj
Akcija
Dolazak segmenta u sekvenci sa očekivanim
seq#. Svi dosada primljeni podaci su potvrđeni. Nema rupa u
primljenim podacima.
Sačekaj period npr. 200ms na
potencijalni dolazak novog segmenta. Ukoliko isti ne dođe do isteka
vremena šalji ACK.
Dolazak segmenta u sekvenci dok jedan već
čeka na slanje potvrde. Nema rupa u primljenim podacima.
Odmah šalji jedan ACK koji
kumulativno potvrđuje dosada primljene podatke.
Događaj
Akcija
Dolazak segmenta van sekvence as većim od
očekivanog seq#. Detekcija rupe u podacima.
Odmah šalji tzv. duplikat ACK
kojim se nanovo potvrđuju do sada primljeni podaci u sekvenci.
Dolazak segmenta koji parcijalno ili u
potpunosti popunjava rupu u primljenim podacima.
Odmah šalji ACK sa povećanim
ack# pod uslovom da segment počinje na donjoj ivici
rupe.
Kada primi potvrdu za određeni segment, pošiljalac prekida tajmer i
obavlja procedure za slanje novih podataka, nanovo aktivirajući tajmer
za svaki poslani segment.
Ponovna slanja segmenata
Ukoliko do isteka perioda ne dođe potvrda o primitku segmenta, TCP
šalje isti segment nanovo.
segment se šalje nanovo i prije isteka tajmera ukoliko se tri puta
dobije duplikat ACK (potvrde već potvrđenog segmenta), ova
procedura je tzv. fast retransmit.
Izabrani scenariji ponovne
transmisije.
Estimacija RTT
Period tajmera T za ponovnu
transmisiju segmenta se mora dobro procijeniti spram trenutnog stanja
mreže.
U obzir se uzima estimirani RTT e,
mjereni RTT m i devijacija estimiranog
RTT δenδnT=0.875⋅es+0.125⋅m=0.75⋅δs+0.25⋅∣m−en∣=e+4⋅δn
U slučaju da se dogodi retransmisija, period tajmer se setuje na
T=2⋅T
Mašina stanja TCP veze
TCP logička veza ima životni vijek koji počinje uspostavom veze, a
završava se prekidom veze.
TCP implementacija na obje strane konekcije prolazi kroz različita
stanja, koja se mogu prikazati FSM-om (mašina stanja)